What is the equivalent (programmatically) of cat /dev/something > file.txt [closed]

The name of the pictureThe name of the pictureThe name of the pictureClash Royale CLAN TAG#URR8PPP












-3















I'm copying a video from a camera stream using a command cat /dev/video0 > file.mpeg
This works perfectly, however I want too break up the file into smaller chunks... So I've been waiting pressing Ctrl+C.. Wanted to automate that so created a batch script that will wait X minutes then halt the job, meanwhile show a progress bar. Works great however I want to take it another step.. I have an XML file that contains the exact times and file names, I have a mono program that parses this file.



Here's the question.. How can I programmatically run this cat command. Sure I could execute a system command. But I was thinking of just doing the entire application in the same language. I can open a file to write as a binary write and read say 1000 bytes at a time... But what is cat doing? Does it know how much/ how fast to read somehow?










share|improve this question















closed as too broad by Rui F Ribeiro, Vlastimil, msp9011, Mr Shunz, Archemar Jan 23 at 15:03


Please edit the question to limit it to a specific problem with enough detail to identify an adequate answer. Avoid asking multiple distinct questions at once. See the How to Ask page for help clarifying this question. If this question can be reworded to fit the rules in the help center, please edit the question.













  • 1





    I think and I might be wrong, that the cat reads and outputs the file as fast as the source device, system and CPU allows.

    – Vlastimil
    Jan 19 at 4:01






  • 1





    You could use dd to limit how much data is written from the device to stdout or a file.

    – Peschke
    Jan 19 at 9:04















-3















I'm copying a video from a camera stream using a command cat /dev/video0 > file.mpeg
This works perfectly, however I want too break up the file into smaller chunks... So I've been waiting pressing Ctrl+C.. Wanted to automate that so created a batch script that will wait X minutes then halt the job, meanwhile show a progress bar. Works great however I want to take it another step.. I have an XML file that contains the exact times and file names, I have a mono program that parses this file.



Here's the question.. How can I programmatically run this cat command. Sure I could execute a system command. But I was thinking of just doing the entire application in the same language. I can open a file to write as a binary write and read say 1000 bytes at a time... But what is cat doing? Does it know how much/ how fast to read somehow?










share|improve this question















closed as too broad by Rui F Ribeiro, Vlastimil, msp9011, Mr Shunz, Archemar Jan 23 at 15:03


Please edit the question to limit it to a specific problem with enough detail to identify an adequate answer. Avoid asking multiple distinct questions at once. See the How to Ask page for help clarifying this question. If this question can be reworded to fit the rules in the help center, please edit the question.













  • 1





    I think and I might be wrong, that the cat reads and outputs the file as fast as the source device, system and CPU allows.

    – Vlastimil
    Jan 19 at 4:01






  • 1





    You could use dd to limit how much data is written from the device to stdout or a file.

    – Peschke
    Jan 19 at 9:04













-3












-3








-3








I'm copying a video from a camera stream using a command cat /dev/video0 > file.mpeg
This works perfectly, however I want too break up the file into smaller chunks... So I've been waiting pressing Ctrl+C.. Wanted to automate that so created a batch script that will wait X minutes then halt the job, meanwhile show a progress bar. Works great however I want to take it another step.. I have an XML file that contains the exact times and file names, I have a mono program that parses this file.



Here's the question.. How can I programmatically run this cat command. Sure I could execute a system command. But I was thinking of just doing the entire application in the same language. I can open a file to write as a binary write and read say 1000 bytes at a time... But what is cat doing? Does it know how much/ how fast to read somehow?










share|improve this question
















I'm copying a video from a camera stream using a command cat /dev/video0 > file.mpeg
This works perfectly, however I want too break up the file into smaller chunks... So I've been waiting pressing Ctrl+C.. Wanted to automate that so created a batch script that will wait X minutes then halt the job, meanwhile show a progress bar. Works great however I want to take it another step.. I have an XML file that contains the exact times and file names, I have a mono program that parses this file.



Here's the question.. How can I programmatically run this cat command. Sure I could execute a system command. But I was thinking of just doing the entire application in the same language. I can open a file to write as a binary write and read say 1000 bytes at a time... But what is cat doing? Does it know how much/ how fast to read somehow?







cat io






share|improve this question















share|improve this question













share|improve this question




share|improve this question








edited Jan 19 at 2:25









Jeff Schaller

40.9k1056130




40.9k1056130










asked Jan 19 at 2:20









user1529413user1529413

184




184




closed as too broad by Rui F Ribeiro, Vlastimil, msp9011, Mr Shunz, Archemar Jan 23 at 15:03


Please edit the question to limit it to a specific problem with enough detail to identify an adequate answer. Avoid asking multiple distinct questions at once. See the How to Ask page for help clarifying this question. If this question can be reworded to fit the rules in the help center, please edit the question.









closed as too broad by Rui F Ribeiro, Vlastimil, msp9011, Mr Shunz, Archemar Jan 23 at 15:03


Please edit the question to limit it to a specific problem with enough detail to identify an adequate answer. Avoid asking multiple distinct questions at once. See the How to Ask page for help clarifying this question. If this question can be reworded to fit the rules in the help center, please edit the question.









  • 1





    I think and I might be wrong, that the cat reads and outputs the file as fast as the source device, system and CPU allows.

    – Vlastimil
    Jan 19 at 4:01






  • 1





    You could use dd to limit how much data is written from the device to stdout or a file.

    – Peschke
    Jan 19 at 9:04












  • 1





    I think and I might be wrong, that the cat reads and outputs the file as fast as the source device, system and CPU allows.

    – Vlastimil
    Jan 19 at 4:01






  • 1





    You could use dd to limit how much data is written from the device to stdout or a file.

    – Peschke
    Jan 19 at 9:04







1




1





I think and I might be wrong, that the cat reads and outputs the file as fast as the source device, system and CPU allows.

– Vlastimil
Jan 19 at 4:01





I think and I might be wrong, that the cat reads and outputs the file as fast as the source device, system and CPU allows.

– Vlastimil
Jan 19 at 4:01




1




1





You could use dd to limit how much data is written from the device to stdout or a file.

– Peschke
Jan 19 at 9:04





You could use dd to limit how much data is written from the device to stdout or a file.

– Peschke
Jan 19 at 9:04










1 Answer
1






active

oldest

votes


















1














Let timeout kill cat



Since it works well enough with cat and ctrl+c, the following command line should work with data according to the question and assuming 5 seconds play-time to be recorded.



timeout 5 cat /dev/video0 > file.mpeg


cat is a simple tool for reading/writing data. There is no way to set the speed or time interval for the data transfer in cat. You have to control it outside cat. But there are many other tools.



Use the built-in features in ffmpeg



It is also possible to use the multimedia tool ffmpeg. There is a steep learning curve, but when you get into using it, you will find that it is a very powerful tool. There are detailed instructions in the manual man ffmpeg but it is better to search for a suitable tutorial via the internet.



I have tested the following command line with conversion from an MTS file to an mpeg file. I have not tested it from a device, but I think it will work. You may want to control the conversion (to be different from the defaults) using more options in the command line.



ffmpeg -t 5 -i /dev/video0 file.mpeg


where -t 5 means that 5 seconds are recorded.



The following command line may be an important improvement,




ffmpeg -i /dev/video0 -f segment -segment_time 10:0 out%03d.mp4


It will split the input into files of 10 minutes length. you should look at the docs here




ffmpegversions



  • In my working computer with Lubuntu 18.04.1 LTS, there is ffmpeg version 3.4.4-0ubuntu0.18.04.1, so version 3.4.4. This is what you get if you install from Ubuntu's repositories. Other linux distros and versions have probably other versions (newer or older).


  • The link (to https://ffmpeg.org) describes version 4.1, and some features in this version may not be there in the older version. This version is more advanced, but may be more complicated to get and to keep up to date with bugfixes.






share|improve this answer

























  • @user1529413, The community is downvoting this answer. If you find it useful, please let me know. Otherwise I will delete it (after some time for you to test it).

    – sudodus
    Jan 19 at 6:44






  • 1





    Take a look at the timeout command, as in timeout $ptime cat ..., which seems to do pretty much everything your script does. (Not entirely sure why you're being downvoted, other than the OP asked for code in mono to replace cat..., which is a low-research question in itself.)

    – roaima
    Jan 19 at 10:12












  • @roaima, Thanks for teaching about timeout :-) I replaced the separate 'sleep' and 'kill' commands with 'timeout', and the shellscript with a oneliner. Now let us wait for the response from the OP.

    – sudodus
    Jan 19 at 10:53






  • 1





    What about improving instead of deleting it? using ffmpeg is the way to go: ffmpeg -i /dev/video0 -f segment -segment_time 10:0 out%03d.mp4 will split the input into files of 10 minutes length. you should look at the docs here.

    – pizdelect
    Jan 19 at 13:38






  • 1





    This is very helpful information, it annoys me to no end that's it's been down voted before I can even see it. Stack overflow has a major problem it needs to address, you've created a system that chases away people. This comment no doubt will be down voted as well.

    – user1529413
    Jan 19 at 14:40

















1 Answer
1






active

oldest

votes








1 Answer
1






active

oldest

votes









active

oldest

votes






active

oldest

votes









1














Let timeout kill cat



Since it works well enough with cat and ctrl+c, the following command line should work with data according to the question and assuming 5 seconds play-time to be recorded.



timeout 5 cat /dev/video0 > file.mpeg


cat is a simple tool for reading/writing data. There is no way to set the speed or time interval for the data transfer in cat. You have to control it outside cat. But there are many other tools.



Use the built-in features in ffmpeg



It is also possible to use the multimedia tool ffmpeg. There is a steep learning curve, but when you get into using it, you will find that it is a very powerful tool. There are detailed instructions in the manual man ffmpeg but it is better to search for a suitable tutorial via the internet.



I have tested the following command line with conversion from an MTS file to an mpeg file. I have not tested it from a device, but I think it will work. You may want to control the conversion (to be different from the defaults) using more options in the command line.



ffmpeg -t 5 -i /dev/video0 file.mpeg


where -t 5 means that 5 seconds are recorded.



The following command line may be an important improvement,




ffmpeg -i /dev/video0 -f segment -segment_time 10:0 out%03d.mp4


It will split the input into files of 10 minutes length. you should look at the docs here




ffmpegversions



  • In my working computer with Lubuntu 18.04.1 LTS, there is ffmpeg version 3.4.4-0ubuntu0.18.04.1, so version 3.4.4. This is what you get if you install from Ubuntu's repositories. Other linux distros and versions have probably other versions (newer or older).


  • The link (to https://ffmpeg.org) describes version 4.1, and some features in this version may not be there in the older version. This version is more advanced, but may be more complicated to get and to keep up to date with bugfixes.






share|improve this answer

























  • @user1529413, The community is downvoting this answer. If you find it useful, please let me know. Otherwise I will delete it (after some time for you to test it).

    – sudodus
    Jan 19 at 6:44






  • 1





    Take a look at the timeout command, as in timeout $ptime cat ..., which seems to do pretty much everything your script does. (Not entirely sure why you're being downvoted, other than the OP asked for code in mono to replace cat..., which is a low-research question in itself.)

    – roaima
    Jan 19 at 10:12












  • @roaima, Thanks for teaching about timeout :-) I replaced the separate 'sleep' and 'kill' commands with 'timeout', and the shellscript with a oneliner. Now let us wait for the response from the OP.

    – sudodus
    Jan 19 at 10:53






  • 1





    What about improving instead of deleting it? using ffmpeg is the way to go: ffmpeg -i /dev/video0 -f segment -segment_time 10:0 out%03d.mp4 will split the input into files of 10 minutes length. you should look at the docs here.

    – pizdelect
    Jan 19 at 13:38






  • 1





    This is very helpful information, it annoys me to no end that's it's been down voted before I can even see it. Stack overflow has a major problem it needs to address, you've created a system that chases away people. This comment no doubt will be down voted as well.

    – user1529413
    Jan 19 at 14:40















1














Let timeout kill cat



Since it works well enough with cat and ctrl+c, the following command line should work with data according to the question and assuming 5 seconds play-time to be recorded.



timeout 5 cat /dev/video0 > file.mpeg


cat is a simple tool for reading/writing data. There is no way to set the speed or time interval for the data transfer in cat. You have to control it outside cat. But there are many other tools.



Use the built-in features in ffmpeg



It is also possible to use the multimedia tool ffmpeg. There is a steep learning curve, but when you get into using it, you will find that it is a very powerful tool. There are detailed instructions in the manual man ffmpeg but it is better to search for a suitable tutorial via the internet.



I have tested the following command line with conversion from an MTS file to an mpeg file. I have not tested it from a device, but I think it will work. You may want to control the conversion (to be different from the defaults) using more options in the command line.



ffmpeg -t 5 -i /dev/video0 file.mpeg


where -t 5 means that 5 seconds are recorded.



The following command line may be an important improvement,




ffmpeg -i /dev/video0 -f segment -segment_time 10:0 out%03d.mp4


It will split the input into files of 10 minutes length. you should look at the docs here




ffmpegversions



  • In my working computer with Lubuntu 18.04.1 LTS, there is ffmpeg version 3.4.4-0ubuntu0.18.04.1, so version 3.4.4. This is what you get if you install from Ubuntu's repositories. Other linux distros and versions have probably other versions (newer or older).


  • The link (to https://ffmpeg.org) describes version 4.1, and some features in this version may not be there in the older version. This version is more advanced, but may be more complicated to get and to keep up to date with bugfixes.






share|improve this answer

























  • @user1529413, The community is downvoting this answer. If you find it useful, please let me know. Otherwise I will delete it (after some time for you to test it).

    – sudodus
    Jan 19 at 6:44






  • 1





    Take a look at the timeout command, as in timeout $ptime cat ..., which seems to do pretty much everything your script does. (Not entirely sure why you're being downvoted, other than the OP asked for code in mono to replace cat..., which is a low-research question in itself.)

    – roaima
    Jan 19 at 10:12












  • @roaima, Thanks for teaching about timeout :-) I replaced the separate 'sleep' and 'kill' commands with 'timeout', and the shellscript with a oneliner. Now let us wait for the response from the OP.

    – sudodus
    Jan 19 at 10:53






  • 1





    What about improving instead of deleting it? using ffmpeg is the way to go: ffmpeg -i /dev/video0 -f segment -segment_time 10:0 out%03d.mp4 will split the input into files of 10 minutes length. you should look at the docs here.

    – pizdelect
    Jan 19 at 13:38






  • 1





    This is very helpful information, it annoys me to no end that's it's been down voted before I can even see it. Stack overflow has a major problem it needs to address, you've created a system that chases away people. This comment no doubt will be down voted as well.

    – user1529413
    Jan 19 at 14:40













1












1








1







Let timeout kill cat



Since it works well enough with cat and ctrl+c, the following command line should work with data according to the question and assuming 5 seconds play-time to be recorded.



timeout 5 cat /dev/video0 > file.mpeg


cat is a simple tool for reading/writing data. There is no way to set the speed or time interval for the data transfer in cat. You have to control it outside cat. But there are many other tools.



Use the built-in features in ffmpeg



It is also possible to use the multimedia tool ffmpeg. There is a steep learning curve, but when you get into using it, you will find that it is a very powerful tool. There are detailed instructions in the manual man ffmpeg but it is better to search for a suitable tutorial via the internet.



I have tested the following command line with conversion from an MTS file to an mpeg file. I have not tested it from a device, but I think it will work. You may want to control the conversion (to be different from the defaults) using more options in the command line.



ffmpeg -t 5 -i /dev/video0 file.mpeg


where -t 5 means that 5 seconds are recorded.



The following command line may be an important improvement,




ffmpeg -i /dev/video0 -f segment -segment_time 10:0 out%03d.mp4


It will split the input into files of 10 minutes length. you should look at the docs here




ffmpegversions



  • In my working computer with Lubuntu 18.04.1 LTS, there is ffmpeg version 3.4.4-0ubuntu0.18.04.1, so version 3.4.4. This is what you get if you install from Ubuntu's repositories. Other linux distros and versions have probably other versions (newer or older).


  • The link (to https://ffmpeg.org) describes version 4.1, and some features in this version may not be there in the older version. This version is more advanced, but may be more complicated to get and to keep up to date with bugfixes.






share|improve this answer















Let timeout kill cat



Since it works well enough with cat and ctrl+c, the following command line should work with data according to the question and assuming 5 seconds play-time to be recorded.



timeout 5 cat /dev/video0 > file.mpeg


cat is a simple tool for reading/writing data. There is no way to set the speed or time interval for the data transfer in cat. You have to control it outside cat. But there are many other tools.



Use the built-in features in ffmpeg



It is also possible to use the multimedia tool ffmpeg. There is a steep learning curve, but when you get into using it, you will find that it is a very powerful tool. There are detailed instructions in the manual man ffmpeg but it is better to search for a suitable tutorial via the internet.



I have tested the following command line with conversion from an MTS file to an mpeg file. I have not tested it from a device, but I think it will work. You may want to control the conversion (to be different from the defaults) using more options in the command line.



ffmpeg -t 5 -i /dev/video0 file.mpeg


where -t 5 means that 5 seconds are recorded.



The following command line may be an important improvement,




ffmpeg -i /dev/video0 -f segment -segment_time 10:0 out%03d.mp4


It will split the input into files of 10 minutes length. you should look at the docs here




ffmpegversions



  • In my working computer with Lubuntu 18.04.1 LTS, there is ffmpeg version 3.4.4-0ubuntu0.18.04.1, so version 3.4.4. This is what you get if you install from Ubuntu's repositories. Other linux distros and versions have probably other versions (newer or older).


  • The link (to https://ffmpeg.org) describes version 4.1, and some features in this version may not be there in the older version. This version is more advanced, but may be more complicated to get and to keep up to date with bugfixes.







share|improve this answer














share|improve this answer



share|improve this answer








edited Jan 19 at 15:42

























answered Jan 19 at 4:04









sudodussudodus

1,49337




1,49337












  • @user1529413, The community is downvoting this answer. If you find it useful, please let me know. Otherwise I will delete it (after some time for you to test it).

    – sudodus
    Jan 19 at 6:44






  • 1





    Take a look at the timeout command, as in timeout $ptime cat ..., which seems to do pretty much everything your script does. (Not entirely sure why you're being downvoted, other than the OP asked for code in mono to replace cat..., which is a low-research question in itself.)

    – roaima
    Jan 19 at 10:12












  • @roaima, Thanks for teaching about timeout :-) I replaced the separate 'sleep' and 'kill' commands with 'timeout', and the shellscript with a oneliner. Now let us wait for the response from the OP.

    – sudodus
    Jan 19 at 10:53






  • 1





    What about improving instead of deleting it? using ffmpeg is the way to go: ffmpeg -i /dev/video0 -f segment -segment_time 10:0 out%03d.mp4 will split the input into files of 10 minutes length. you should look at the docs here.

    – pizdelect
    Jan 19 at 13:38






  • 1





    This is very helpful information, it annoys me to no end that's it's been down voted before I can even see it. Stack overflow has a major problem it needs to address, you've created a system that chases away people. This comment no doubt will be down voted as well.

    – user1529413
    Jan 19 at 14:40

















  • @user1529413, The community is downvoting this answer. If you find it useful, please let me know. Otherwise I will delete it (after some time for you to test it).

    – sudodus
    Jan 19 at 6:44






  • 1





    Take a look at the timeout command, as in timeout $ptime cat ..., which seems to do pretty much everything your script does. (Not entirely sure why you're being downvoted, other than the OP asked for code in mono to replace cat..., which is a low-research question in itself.)

    – roaima
    Jan 19 at 10:12












  • @roaima, Thanks for teaching about timeout :-) I replaced the separate 'sleep' and 'kill' commands with 'timeout', and the shellscript with a oneliner. Now let us wait for the response from the OP.

    – sudodus
    Jan 19 at 10:53






  • 1





    What about improving instead of deleting it? using ffmpeg is the way to go: ffmpeg -i /dev/video0 -f segment -segment_time 10:0 out%03d.mp4 will split the input into files of 10 minutes length. you should look at the docs here.

    – pizdelect
    Jan 19 at 13:38






  • 1





    This is very helpful information, it annoys me to no end that's it's been down voted before I can even see it. Stack overflow has a major problem it needs to address, you've created a system that chases away people. This comment no doubt will be down voted as well.

    – user1529413
    Jan 19 at 14:40
















@user1529413, The community is downvoting this answer. If you find it useful, please let me know. Otherwise I will delete it (after some time for you to test it).

– sudodus
Jan 19 at 6:44





@user1529413, The community is downvoting this answer. If you find it useful, please let me know. Otherwise I will delete it (after some time for you to test it).

– sudodus
Jan 19 at 6:44




1




1





Take a look at the timeout command, as in timeout $ptime cat ..., which seems to do pretty much everything your script does. (Not entirely sure why you're being downvoted, other than the OP asked for code in mono to replace cat..., which is a low-research question in itself.)

– roaima
Jan 19 at 10:12






Take a look at the timeout command, as in timeout $ptime cat ..., which seems to do pretty much everything your script does. (Not entirely sure why you're being downvoted, other than the OP asked for code in mono to replace cat..., which is a low-research question in itself.)

– roaima
Jan 19 at 10:12














@roaima, Thanks for teaching about timeout :-) I replaced the separate 'sleep' and 'kill' commands with 'timeout', and the shellscript with a oneliner. Now let us wait for the response from the OP.

– sudodus
Jan 19 at 10:53





@roaima, Thanks for teaching about timeout :-) I replaced the separate 'sleep' and 'kill' commands with 'timeout', and the shellscript with a oneliner. Now let us wait for the response from the OP.

– sudodus
Jan 19 at 10:53




1




1





What about improving instead of deleting it? using ffmpeg is the way to go: ffmpeg -i /dev/video0 -f segment -segment_time 10:0 out%03d.mp4 will split the input into files of 10 minutes length. you should look at the docs here.

– pizdelect
Jan 19 at 13:38





What about improving instead of deleting it? using ffmpeg is the way to go: ffmpeg -i /dev/video0 -f segment -segment_time 10:0 out%03d.mp4 will split the input into files of 10 minutes length. you should look at the docs here.

– pizdelect
Jan 19 at 13:38




1




1





This is very helpful information, it annoys me to no end that's it's been down voted before I can even see it. Stack overflow has a major problem it needs to address, you've created a system that chases away people. This comment no doubt will be down voted as well.

– user1529413
Jan 19 at 14:40





This is very helpful information, it annoys me to no end that's it's been down voted before I can even see it. Stack overflow has a major problem it needs to address, you've created a system that chases away people. This comment no doubt will be down voted as well.

– user1529413
Jan 19 at 14:40


Popular posts from this blog

How to check contact read email or not when send email to Individual?

Displaying single band from multi-band raster using QGIS

How many registers does an x86_64 CPU actually have?